home *** CD-ROM | disk | FTP | other *** search
Wrap
<?xml version="1.0" encoding="EUC-KR"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX This file is generated from xml source: DO NOT EDIT XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --> <title>╛╞╞──í ╝║┤╔╟Γ╗≤ - Apache HTTP Server</title> <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /> <link href="../images/favicon.ico" rel="shortcut icon" /></head> <body id="manual-page"><div id="page-header"> <p class="menu"><a href="../mod/">╕≡╡Γ</a> | <a href="../mod/directives.html">┴÷╜├╛ε╡Θ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">┐δ╛ε</a> | <a href="../sitemap.html">╗τ└╠╞«╕╩</a></p> <p class="apache">Apache HTTP Server Version 2.2</p> <img alt="" src="../images/feather.gif" /></div> <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> <div id="path"> <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.2</a> > <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>╛╞╞──í ╝║┤╔╟Γ╗≤</h1> <div class="toplang"> <p><span>░í┤╔╟╤ ╛≡╛ε: </span><a href="../en/misc/perf-tuning.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="../ko/misc/perf-tuning.html" title="Korean"> ko </a></p> </div> <div class="outofdate">└╠ ╣«╝¡┤┬ ├╓╜┼╞╟ ╣°┐¬└╠ ╛╞┤╒┤╧┤┘. ├╓▒┘┐í ║»░µ╡╚ │╗┐δ└║ ┐╡╛ε ╣«╝¡╕ª ┬ⁿ░φ╟╧╝╝┐Σ.</div> <p>╛╞╞──í 2.0└║ ▒Γ┤╔░· ╞≈╞├░í┤╔╝║░· ╝║┤╔└╟ ▒╒╟ⁿ└╠ ╕┬╡╡╖╧ ╝│░Φ╟╤ ╣ⁿ┐δ └Ñ╝¡╣÷└╠┤┘. ║Ñ─í╕╢┼⌐ ▒Γ╖╧└╗ ╝╝┐∞▒Γ└º╟╪ ╝│░Φ╟╧┴÷ ╛╩╛╥┴÷╕╕ ╛╞╞──í 2.0└║ ╜╟┴ª ╕╣└║ ░µ┐∞ │⌠└║ ╝║┤╔└╗ │╜┤┘.</p> <p>╛╞╞──í 1.3░· ║±▒│╟╪╝¡ 2.0 ╣÷└ⁿ└║ ├│╕«╖«░· ╚«└σ╝║(scalability)└╗ │⌠└╠▒Γ└º╟╪ ╕╣└║ ├╓└√╚¡╕ª ╟▀┤┘. ▒Γ║╗░¬└╕╖╬ ┤δ║╬║╨ ├╓└√╚¡╟╤ ░¬└╗ ╗τ┐δ╟╤┤┘. ▒╫╖»│¬ ──╞─└╧╜├ ╚ñ└║ ╜╟╟α╜├ ╝│┴ñ└╠ ╝║┤╔┐í ┼½ ┐╡╟Γ└╗ ┴┘ ╝÷ └╓┤┘. └╠ ╣«╝¡┤┬ ╛╞╞──í 2.0└╟ ╝║┤╔└╗ ╟Γ╗≤╟╧▒Γ└º╟╪ ╝¡╣÷ ░ⁿ╕«└┌░í ╝│┴ñ╟╥ ╝÷ └╓┤┬ ┐╔╝╟└╗ ╝│╕φ╟╤┤┘. ╛ε╢▓ ╝│┴ñ ┐╔╝╟└║ └Ñ╝¡╣÷░í ╟╧╡σ┐■╛ε┐═ ┐ε┐╡├╝┴ª└╟ ▒Γ┤╔└╗ ┤⌡ └▀ ╚░┐δ╟╧╡╡╖╧ ╟╧┤┬ ╣▌╕Θ, ╛ε╢▓ ┐╔╝╟└║ ╝╙╡╡╕ª └º╟╪ ▒Γ┤╔└╗ ╚±╗²╟╤┤┘.</p> </div> <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#hardware">╟╧╡σ┐■╛ε┐═ ┐ε┐╡├╝┴ª┐í ┤δ╟╪╝¡</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#runtime">╜╟╟α╜├ ╝│┴ñ┐í ┤δ╟╪╝¡</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#compiletime">──╞─└╧╜├ ╝│┴ñ┐í ┤δ╟╪╝¡</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#trace">║╬╖╧: ╜├╜║┼█╚ú├Γ ▒Γ╖╧└╗ └┌╝╝╚≈ ║╨╝«╟╧▒Γ</a></li> </ul></div> <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="hardware" id="hardware">╟╧╡σ┐■╛ε┐═ ┐ε┐╡├╝┴ª┐í ┤δ╟╪╝¡</a></h2> <p>└Ñ╝¡╣÷ ╝║┤╔┐í ░í└σ ┼½ ┐╡╟Γ└╗ ┴╓┤┬ ░═└║ ╕▐╕≡╕«┤┘. ╜║┐╥└║ ┐Σ├╗┤τ ┴÷┐¼╜├░ú└╗ ╗τ┐δ└┌░í "├µ║╨╚≈ ║ⁿ╕ú┤┘░φ" ╗²░ó╟╧┴÷ ╕°╟╧░╘ ┤├╕«▒Γ╢º╣«┐í └Ñ╝¡╣÷┤┬ ╜║┐╥└╗ ╟╧╕Θ ╛╚╡╚┤┘. ┤└╖┴┴÷╕Θ ╗τ┐δ└┌┤┬ ┴ñ┴÷╟╧░φ ┤┘╜├ ┴ó╝╙╟╧┐⌐ ║╬╟╧░í ░Φ╝╙ ┴⌡░í╟╤┤┘. <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> ┴÷╜├╛ε╕ª ┴╢└²╟╧┐⌐ └Ñ╝¡╣÷░í ╜║┐╥└╗ ╟╥ ┴ñ╡╡╖╬ ╕╣└║ └┌╜─└╗ ╕╕╡Θ┴÷╛╩╡╡╖╧ ╟╪╛▀ ╟╤┤┘. ╣µ╣²└║ ░ú┤▄╟╧┤┘: <code>top</code>░· ░░└║ ╡╡▒╕┐í╝¡ ╟┴╖╬╝╝╜║ ╕±╖╧└╗ ║╕░φ ╛╞╞──í ╟┴╖╬╝╝╜║└╟ ╞≥▒╒ ╕▐╕≡╕« ╗τ┐δ╖«└╗ ╛╦╛╞│╜╚─, └ⁿ├╝ ╗τ┐δ░í┤╔╟╤ ╕▐╕≡╕«┐í╝¡ ┤┘╕Ñ ╟┴╖╬╝╝╜║╡Θ└╠ ╗τ┐δ╟╥ ░°░ú└╗ ╗½ ░¬┐í╝¡ │¬┤½┤┘.</p> <p>│¬╕╙┴÷┤┬ ╞≥╣ⁿ╟╧┤┘: ├µ║╨╚≈ ║ⁿ╕Ñ CPU, ├µ║╨╚≈ ║ⁿ╕Ñ │╫╞«┐≈─½╡σ, ├µ║╨╚≈ ║ⁿ╕Ñ ╡≡╜║┼⌐, ┐⌐▒Γ╝¡ "├µ║╨╚≈ ║ⁿ╕Ñ"└║ ╜╟╟Φ└╗ ╟╪╝¡ ░ß┴ñ╟╪╛▀ ╟╤┤┘.</p> <p>┐ε┐╡├╝┴ª┤┬ ║╕┼δ ░ó└┌ ╛╦╛╞╝¡ ╝▒┼├╟╥ └╧└╠┤┘. ▒╫╖»│¬ └╧╣▌└√└╕╖╬ └»┐δ╟╧┤┘░φ ╞╟╕φ╡╚ ╕ε░í┴÷ ┴÷─º└╠ └╓┤┘:</p> <ul> <li> <p>╝▒┼├╟╤ ┐ε┐╡├╝┴ª└╟ ├╓╜┼ ╛╚┴ñ ╣÷└ⁿ░· ╞╨─í╕ª ╜╟╟α╟╤┤┘. ╕╣└║ ┐ε┐╡├╝┴ª ┴ª└█╗τ┤┬ ├╓▒┘ TCP ╜║┼├░· ╛▓╖╣╡σ ╢≤└╠║Ω╖»╕«┐í ╕╣└║ ╝╙╡╡╟Γ╗≤└╗ ╟▀┤┘.</p> </li> <li> <p>┐ε┐╡├╝┴ª░í <code>sendfile(2)</code> ╜├╜║┼█╚ú├Γ└╗ ┴÷┐°╟╤┤┘╕Θ, └╠╕ª ╗τ┐δ╟╧▒Γ└º╟╤ ╣÷└ⁿ└╠│¬ ╞╨─í╕ª ╝│─í╟╧┐┤┤┬┴÷ ╚«└╬╟╤┤┘. (┐╣╕ª ╡Θ╛ε, ╕«┤¬╜║╢≤╕Θ 2.4 └╠╗≤ ╣÷└ⁿ└╗ ╢µ╟╤┤┘. Solaris 8 ├╩▒Γ ╣÷└ⁿ└║ ╞╨─í░í ╟╩┐Σ╟╧┤┘.) ┴÷┐°╟╧┤┬ ╜├╜║┼█└╠╢≤╕Θ ╛╞╞──í 2┤┬ <code>sendfile</code>└╗ ╗τ┐δ╟╧┐⌐ CPU╕ª ┤· ╗τ┐δ╟╧╕τ ┴ñ└√ ╞─└╧└╗ ┤⌡ ╗í╕« └ⁿ╝█╟╥ ╝÷ └╒┤┘.</p> </li> </ul> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="runtime" id="runtime">╜╟╟α╜├ ╝│┴ñ┐í ┤δ╟╪╝¡</a></h2> <table class="related"><tr><th>░ⁿ╖├╡╚ ╕≡╡Γ</th><th>░ⁿ╖├╡╚ ┴÷╜├╛ε</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code></li><li><code class="module"><a href="../mod/mpm_common.html">mpm_common</a></code></li><li><code class="module"><a href="../mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code></li><li><code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code></li><li><code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code></li><li><code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code></li><li><code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code></li><li><code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code></li><li><code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li></ul></td></tr></table> <h3><a name="dns" id="dns">HostnameLookups┐═ DNS┐í ┤δ╟╪ ░φ╖┴╟╥ ┴í╡Θ</a></h3> <p>╛╞╞──í 1.3 └╠└ⁿ┐í <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code>└╟ ▒Γ║╗░¬└║ <code>On</code>└╠┐┤┤┘. ┐Σ├╗└╗ ╕╢─í▒Γ└ⁿ┐í DNS ░╦╗÷└╠ │í│¬╛▀ ╟╧╣╟╖╬ ┐Σ├╗╕╢┤┘ ┴÷┐¼└╠ ╗²░σ┤┘. ╛╞╞──í 1.3┐í╝¡ └╠ ╝│┴ñ└╟ ▒Γ║╗░¬└╠ <code>Off</code>╖╬ ║»░µ╡╟╛·┤┘. ╖╬▒╫╞─└╧└╟ ┴╓╝╥╕ª ╚ú╜║╞«╕φ└╕╖╬ ║»╚»╟╧╖┴╕Θ ┐⌐╖» ╖╬▒╫├│╕« ╟┴╖╬▒╫╖Ñ┴▀ ╟╧│¬└╬, ╛╞╞──í┐í ╞≈╟╘╡╚ <a href="../programs/logresolve.html"><code>logresolve</code></a> ╟┴╖╬▒╫╖Ñ└╗ ╗τ┐δ╟╧╢≤.</p> <p>╖╬▒╫├│╕« └█╛≈└╠ ╝¡╣÷ ╝║┤╔┐í ╛╟┐╡╟Γ└╗ ╣╠─í╣╟╖╬ ╜╟┴ª ╗τ┐δ╟╧┤┬ └Ñ╝¡╣÷░í ╛╞┤╤ ┤┘╕Ñ ──╟╗┼═┐í╝¡ ╖╬▒╫╞─└╧└╗ ╚─├│╕«╟╧▒µ ╣┘╢⌡┤┘.</p> <p><code><code class="directive"><a href="../mod/mod_access.html#allow">Allow</a></code> from domain</code>└╠│¬ <code><code class="directive"><a href="../mod/mod_access.html#deny">Deny</a></code> from domain</code> ┴÷╜├╛ε╕ª ╗τ┐δ╟╤┤┘╕Θ (┴∩, IP ┴╓╝╥░í ╛╞┤╤ ╚ú╜║╞«╕φ└╠│¬ ╡╡╕▐└╬╕φ└╗ ╗τ┐δ╟╤┤┘╕Θ) ║╬╡µ└╠ ┴▀║╣-┐¬ DNS ░╦╗÷└╗ (┐¬░╦╗÷└╗ ╟╤╚─ ╛╟└╟╖╬ ║»░µ╡╟╛·┤┬┴÷ ╚«└╬╟╧▒Γ└º╟╪ ┤┘╜├ ░╦╗÷) ╟╪╛▀ ╟╤┤┘. ▒╫╖»╣╟╖╬ ╝║┤╔└╗ │⌠└╠▒Γ└º╟╪ └╠╖▒ ┴÷╜├╛ε┐í┤┬ ░í┤╔╟╧╕Θ └╠╕º┤δ╜┼ IP ┴╓╝╥╕ª ╗τ┐δ╟╤┤┘.</p> <p><code><Location /server-status></code> ╝╜╝╟ ╡ε└╕╖╬ ┴÷╜├╛ε└╟ └√┐δ╣ⁿ└º╕ª ┴ª╟╤╟╥ ╝÷ └╓└╜└╗ ▒Γ╛∩╟╧╢≤. └╠ ░µ┐∞ ┴╢░╟┐í ╕┬┤┬ ┐Σ├╗┐í╕╕ DNS ┴╢╚╕╕ª ╟╤┤┘. ┤┘└╜└║ <code>.html</code>░· <code>.cgi</code> ╞─└╧╕╕ DNS ░╦╗÷└╗ ╟╧┤┬ ┐╣┴ª┤┘:</p> <div class="example"><p><code> HostnameLookups off<br /> <Files ~ "\.(html|cgi)$"><br /> <span class="indent"> HostnameLookups on<br /> </span> </Files> </code></p></div> <p>▒╫╖»│¬ CGI┐í╝¡ DNS╕φ└╠ ╟╩┐Σ╟╥ ╗╙└╠╢≤╕Θ, ╟╩┐Σ╟╤ ╞»┴ñ CGI┐í╝¡╕╕ <code>gethostbyname</code> ╚ú├Γ└╗ ╟╧╡╡╖╧ ░φ╖┴╟╪║╝ ╝÷ └╓┤┘.</p> <h3><a name="symlinks" id="symlinks">FollowSymLinks┐═ SymLinksIfOwnerMatch</a></h3> <p>URL ░°░ú┐í╝¡ <code>Options FollowSymLinks</code>╕ª ╗τ┐δ╟╧┴÷╛╩░φ <code>Options SymLinksIfOwnerMatch</code>╕ª ╗τ┐δ╟╧╕Θ ╛╞╞──í┤┬ ╜╔║╝╕╡┼⌐╕ª ░╦╗τ╟╧▒Γ└º╟╪ ╜├╜║┼█╚ú├Γ└╗ ╟╤╣° ┤⌡ ╟╪╛▀ ╟╤┤┘. ╞─└╧╕φ└╟ ░ó ║╬║╨╕╢┤┘ ╟╤╣°╛┐ ┤⌡ ╚ú├Γ└╗ ╟╤┤┘. ┐╣╕ª ╡Θ╛ε, ╝│┴ñ└╠ ┤┘└╜░· ░░░φ:</p> <div class="example"><p><code> DocumentRoot /www/htdocs<br /> <Directory /><br /> <span class="indent"> Options SymLinksIfOwnerMatch<br /> </span> </Directory> </code></p></div> <p><code>/index.html</code> URI┐í ┤δ╟╤ ┐Σ├╗└╠ └╓┤┘░φ ░í┴ñ╟╧└┌. ▒╫╖»╕Θ ╛╞╞──í┤┬ <code>/www</code>, <code>/www/htdocs</code>, <code>/www/htdocs/index.html</code> ░ó░ó┐í ┤δ╟╪ <code>lstat(2)</code>╕ª ╚ú├Γ╟╤┤┘. <code>lstats</code> ░ß░·╕ª ─│╜╠╟╧┴÷ ╛╩▒Γ╢º╣«┐í ┐Σ├╗└╠ ╡Θ╛ε┐├ ╢º╕╢┤┘ ╕┼╣° ░░└║ └█╛≈└╗ ╟╤┤┘. ┴°┬Ñ ╜╔║╝╕╡┼⌐ ║╕╛╚ ░╦╗τ╕ª ┐°╟╤┤┘╕Θ ┤┘└╜░· ░░└╠ ╟╥ ╝÷ └╓┤┘:</p> <div class="example"><p><code> DocumentRoot /www/htdocs<br /> <Directory /><br /> <span class="indent"> Options FollowSymLinks<br /> </span> </Directory><br /> <br /> <Directory /www/htdocs><br /> <span class="indent"> Options -FollowSymLinks +SymLinksIfOwnerMatch<br /> </span> </Directory> </code></p></div> <p>└╠ ░µ┐∞ ├╓╝╥╟╤ <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> ░µ╖╬┤┬ ░╦╗τ╟╧┴÷ ╛╩┤┬┤┘. DocumentRoot ╣█┐í └╓┤┬ ░µ╖╬╖╬ <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>│¬ <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>└╗ ╗τ┐δ╟╤ ░µ┐∞┐í╡╡ └º┐═ ║±╜┴╟╤ ╝╜╝╟└╠ ╟╩┐Σ╟╧┤┘. ╜╔║╝╕╡┼⌐ ║╕╛╚└╗ ░φ╖┴╟╧┴÷ ╛╩░φ ├╓░φ└╟ ╝║┤╔└╗ ╛≥└╕╖┴╕Θ, <code>FollowSymLinks</code>╕ª ╝│┴ñ╟╧░φ, <code>SymLinksIfOwnerMatch</code>┤┬ └²┤δ╖╬ ╛╚╡╚┤┘.</p> <h3><a name="htacess" id="htacess">AllowOverride</a></h3> <p>URL ░°░ú┐í╝¡ overrides╕ª ╟π┐δ╟╤┤┘╕Θ (║╕┼δ <code>.htaccess</code> ╞─└╧) ╛╞╞──í┤┬ ╞─└╧╕φ└╟ ░ó ║╬║╨╕╢┤┘ <code>.htaccess</code>╕ª ┐¡▒µ ╜├╡╡╟╤┤┘. ┐╣╕ª ╡Θ╛ε,</p> <div class="example"><p><code> DocumentRoot /www/htdocs<br /> <Directory /><br /> <span class="indent"> AllowOverride all<br /> </span> </Directory> </code></p></div> <p><code>/index.html</code> URI┐í ┤δ╟╤ ┐Σ├╗└╠ └╓┤┘░φ ░í┴ñ╟╧└┌. ╛╞╞──í┤┬ <code>/.htaccess</code>, <code>/www/.htaccess</code>, <code>/www/htdocs/.htaccess</code>╕ª ┐¡╖┴░φ ╜├╡╡╟╤┤┘. ╟╪░ß├Ñ└║ ╛╒└╟ <code>Options FollowSymLinks</code> ░µ┐∞┐═ ║±╜┴╟╧┤┘. ├╓░φ└╟ ╝║┤╔└╗ ╛≥└╕╖┴╕Θ ╞─└╧╜├╜║┼█┐í ┤δ╟╪╝¡ ╟╫╗≤ <code>AllowOverride None</code>└╗ ╗τ┐δ╟╤┤┘.</p> <h3><a name="negotiation" id="negotiation">│╗┐δ╟∙╗≤</a></h3> <p>░í┤╔╟╧░φ ┴°┬Ñ ┴╢▒▌└╟ ╝║┤╔╟Γ╗≤┐í╡╡ ░ⁿ╜╔└╠ └╓┤┘╕Θ │╗┐δ╟∙╗≤└╗ ╕╖┤┬┤┘. ╜╟┴ª╖╬ ╟∙╗≤└╟ └╠╡µ└║ ╝║┤╔└·╟╧║╕┤┘ └█┤┘. ╝¡╣÷╕ª ║ⁿ╕ú░╘ ╟╥ ╝÷ └╓┤┘. ┤┘└╜░· ░░└╠ ┐═└╧╡σ─½╡σ╕ª ╗τ┐δ╟╧┤┬ ┤δ╜┼:</p> <div class="example"><p><code> DirectoryIndex index </code></p></div> <p>┐╧└ⁿ╟╤ ╕±╖╧└╗ ╗τ┐δ╟╤┤┘:</p> <div class="example"><p><code> DirectoryIndex index.cgi index.pl index.shtml index.html </code></p></div> <p>░í└σ ╚τ╟╤ ░═└╗ ╛╒┐í ╡╨┤┘.</p> <p>╢╟, ╡≡╖║┼Σ╕«┐í╝¡ ╞─└╧╡Θ└╗ ├ú┤┬ <code>MultiViews</code> ║╕┤┘┤┬, ╟╤ ╞─└╧╕╕ └╨└╕╕Θ ╟╩┐Σ╟╤ ┴ñ║╕╕ª ╛≥└╗ ╝÷ └╓┤┬ <code>type-map</code> ╞─└╧└╗ ┴≈┴ó ╕╕╡σ┤┬ ░═└╠ ┤⌡ ║ⁿ╕º└╗ ╕φ╜╔╟╧╢≤.</p> <p>╗τ└╠╞«┐í │╗┐δ╟∙╗≤└╠ ╟╩┐Σ╟╧┤┘╕Θ ╟∙╗≤└╗ └º╟╪ <code>Options MultiViews</code> ┴÷╜├╛ε╕ª ╗τ┐δ╟╧▒Γ║╕┤┘ <code>type-map</code> ╞─└╧└╗ ░φ╖┴╟╧╢≤. ╟∙╗≤╣µ╣²┐í ┤δ╟╤ └┌╝╝╟╤ ╝│╕φ░· <code>type-map</code> ╞─└╧└╗ ╕╕╡σ┤┬ ╣µ╣²└║ <a href="../content-negotiation.html">│╗┐δ╟∙╗≤</a> ╣«╝¡╕ª ┬ⁿ░φ╟╧╢≤.</p> <h3>╕▐╕≡╕«┤δ└└ (memory-mapping)</h3> <p>┐╣╕ª ╡Θ╛ε, server-side-include╕ª ├│╕«╟╧┤┬ ╡ε ╛╞╞──í 2.0└╠ └ⁿ╝█╟╥ ╞─└╧└╗ └╨└╗╢º ┐ε┐╡├╝┴ª░í <code>mmap(2)</code> ╡ε└╗ ┴÷┐°╟╤┤┘╕Θ ╞─└╧└╗ ╕▐╕≡╕«┤δ└└╟╤┤┘.</p> <p>┐⌐╖» ╟├╖í╞√┐í╝¡ ╕▐╕≡╕«┤δ└└└╗ ╝║┤╔└╗ ╟Γ╗≤╟╤┤┘. ▒╫╖»│¬ ╕▐╕≡╕«┤δ└└└╠ ╝¡╣÷└╟ ╝║┤╔└╗ ╢│╛ε╞«╕«░φ ╜╔┴÷╛ε ╛╚┴ñ╝║└╗ ╟╪─í┤┬ ░µ┐∞░í └╓┤┘:</p> <ul> <li> <p>╛ε╢▓ ┐ε┐╡├╝┴ª┐í╝¡ <code>mmap</code>└║ CPU ░│╝÷░í ╕╣╛╞┴·╢º <code>read(2)</code> ╕╕┼¡ ╚«└σ╝║└╠ ┴┴┴÷ ╛╩┤┘. ┐╣╕ª ╡Θ╛ε, ┤┘┴▀╟┴╖╬╝╝╝¡ Solaris ╝¡╣÷┐í╝¡ ╛╞╞──í 2.0└║ ┴╛┴╛ <code>mmap</code>└╗ ╗τ┐δ╟╧┴÷ ╛╩└╗╢º ╝¡╣÷░í ├│╕«╟╤ ╞─└╧└╗ ┤⌡ ╗í╕« └ⁿ╝█╟╤┤┘.</p> </li> <li> <p>NFS ╕╢┐ε╞«╟╤ ╞─└╧╜├╜║┼█┐í └╓┤┬ ╞─└╧└╗ ╕▐╕≡╕«┤δ└└╟╧┤┬ ╡╡┴▀┐í ┤┘╕Ñ NFS ┼¼╢≤└╠╛≡╞«┐í └╓┤┬ ╟┴╖╬╝╝╜║░í ╞─└╧└╗ ┴÷┐∞░┼│¬ ╞─└╧┼⌐▒Γ╕ª ┴┘└╠╕Θ, └Ñ╝¡╣÷ ╟┴╖╬╝╝╜║░í ┤┘└╜ ╣°┐í ╕▐╕≡╕«┤δ└└╟╤ ╞─└╧│╗┐δ└╗ └╨└╗╢º bus error░í ╣▀╗²╟╥ ╝÷ └╓┤┘.</p> </li> </ul> <p>└º└╟ ┴╢░╟┐í ╟╪┤τ╟╧╕Θ └ⁿ╝█╟╧┤┬ ╞─└╧└╗ ╕▐╕≡╕«┤δ└└╟╧┴÷ ╛╩╡╡╖╧ <code>EnableMMAP off</code>╕ª ╗τ┐δ╟╪╛▀ ╟╤┤┘. (┴╓└╟: └╠ ┴÷╜├╛ε┤┬ ╡≡╖║┼Σ╕«║░╖╬ ║»░µ╟╥ ╝÷ └╓┤┘.)</p> <h3>Sendfile</h3> <p>╛╞╞──í┤┬ ┐ε┐╡├╝┴ª░í <code>sendfile(2)</code>└╗ ┴÷┐°╟╧╕Θ ─┐│╬ sendfile└╗ ╗τ┐δ╟╧┐⌐ -- ┐╣╕ª ╡Θ╛ε, ┴ñ└√ ╞─└╧└╗ ╝¡║±╜║╟╥╢º -- └ⁿ╝█╟╥ ╞─└╧└╗ ┴≈┴ó └╨┴÷╛╩└╗ ╝÷ └╓┤┘.</p> <p>┐⌐╖» ╟├╖í╞√┐í╝¡ sendfile└╗ ╗τ┐δ╟╧╕Θ read┐═ send╕ª ╡√╖╬ ╟╥ ╟╩┐Σ░í ╛°╛ε╝¡ ╗í╢≤┴°┤┘. ▒╫╖»│¬ sendfile└╗ ╗τ┐δ╟╧╕Θ └Ñ╝¡╣÷└╟ ╛╚┴ñ╝║└╗ ╟╪─í░╘╡╟┤┬ ░µ┐∞░í └╓┤┘:</p> <ul> <li> <p>sendfile ┴÷┐°└╠ └▀╕°╡╟╛·░φ ──╞─└╧ ╜├╜║┼█└╠ └╠┴í└╗ ╣▀░▀╟╧┴÷ ╕°╟╧┤┬ ╟├╖í╞√└╠ └╓┤┘. ╞»╚≈ ┤┘╕Ñ ──╟╗┼═┐í╝¡ ╜╟╟α╞─└╧└╗ ──╞─└╧╟╧┐⌐ sendfile ┴÷┐°└╠ └▀╕°╡╚ ──╟╗┼═╖╬ ░í┴«┐┬ ░µ┐∞┐í ░í┤╔╟╧┤┘.</p> </li> <li> <p>─┐│╬└║ └┌╜┼└╟ ─│╜¼╕ª ╗τ┐δ╟╧┐⌐ NFS╖╬ ╕╢┐ε╞«╟╤ ╞─└╧└╗ ╛╚┴ñ└√└╕╖╬ ╝¡║±╜║╟╥ ╝÷ ╛°┤┬ ░µ┐∞░í └╓┤┘.</p> </li> </ul> <p>└º└╟ ┴╢░╟┐í ╟╪┤τ╟╧╕Θ ╞─└╧└╗ sendfile └ⁿ╝█╟╧┴÷ ╛╩╡╡╖╧ <code>EnableSendfile off</code>╕ª ╗τ┐δ╟╪╛▀ ╟╤┤┘. (┴╓└╟: └╠ ┴÷╜├╛ε┤┬ ╡≡╖║┼Σ╕«║░╖╬ ║»░µ╟╥ ╝÷ └╓┤┘.)</p> <h3><a name="process" id="process">╟┴╖╬╝╝╜║ ╗²╝║</a></h3> <p>╛╞╞──í 1.3 └╠└ⁿ┐í┤┬ <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>, <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code>, <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> ╝│┴ñ└╠ ╕≡╡╬ ║Ñ─í╕╢┼⌐ ░ß░·┐í ┼½ ┐╡╟Γ└╗ ╣╠├╞┤┘. ╞»╚≈ ╛╞╞──í┤┬ └█╛≈└╗ ╝¡║±╜║╟╧▒Γ└º╟╪ ├µ║╨╟╤ └┌╜─╝÷┐í ┤┘┤┘╕ª ╢º▒ε┴÷ "╡╡┤▐" ▒Γ░ú└╠ ╟╩┐Σ╟▀┤┘. ├│└╜ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>░│ └┌╜─└╗ ╕╕╡τ╚─, <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code> ╝│┴ñ░¬▒ε┴÷ ├╩┤τ └┌╜─└╗ ╟╧│¬╛┐ ╕╕╡Θ╛·┤┘. ▒╫╖í╝¡ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> ▒Γ║╗░¬└╠ <code>5</code>└╬ ╝¡╣÷┐í ┼¼╢≤└╠╛≡╞« 100░│░í ╡┐╜├┐í ┴ó╝╙╟╧╕Θ ║╬╟╧╕ª ├│╕«╟╧▒Γ┐í ├µ║╨╟╤ └┌╜─└╗ ╕╕╡Θ▒Γ▒ε┴÷ 95├╩░í ░╔╖╚┤┘. └┌┴╓ └τ╜├└█╟╧┴÷ ╛╩┤┬ ╜╟┴ª ╝¡╣÷┐í╝¡┤┬ └▀ ╡┐└█╟╧┴÷╕╕, 10║╨░ú╕╕ ╜╟╟α╟╧┤┬ ║Ñ─í╕╢┼⌐ ░ß░·┤┬ ╕┼┐∞ │¬╗┌░╘ │¬┐┬┤┘.</p> <p>├╩┤τ ╟╤░│ ▒╘─ó└║ └┌╜─└╗ ╗⌡╖╬ ╜├└█╟╧╕Θ╝¡ ╝¡╣÷┐í ╣½╕«╕ª ┴╓┴÷ ╛╩└╕╖┴░φ ┴ñ╟▀┤┘. ──╟╗┼═░í └┌╜─└╗ ╜├└█╟╧┤└╢≤ ╣┘╗┌╕Θ ┐Σ├╗└╗ ╝¡║±╜║╟╥ ╝÷ ╛°┤┘. ▒╫╖»│¬ └╠ ▒╘─ó└╠ ╛╞╞──í└╟ ├╝░¿ ╝║┤╔┐í ╛╟┐╡╟Γ└╗ ┴╓╛ε ║»░µ╟╧┐┤┤┘. ╛╞╞──í 1.3┐í╝¡ ├╩┤τ ╟╤░│ ▒╘─ó└║ ┐╧╚¡╡╟╛·┤┘. ─┌╡σ┤┬ └┌╜─ ╟╤░│╕ª ╕╕╡Θ░φ, 1├╩ ╜¼░φ, ╡╬░│╕ª ╕╕╡Θ░φ, 1├╩ ╜¼░φ, │╫░│╕ª ╕╕╡Θ░φ, └╠╖▒ ╜─└╕╖╬ ├╩┤τ └┌╜─└╗ 32░│ ╕╕╡Θ╢º▒ε┴÷ ┴÷╝÷╖╬ ┴⌡░í╟╤┤┘. └┌╜─╝÷░í <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code> ╝│┴ñ┐í ┤┘┤┘╕ú╕Θ ┴⌡░í╕ª ┴▀┤▄╟╤┤┘.</p> <p>└╠ ░µ┐∞ ╣▌└└╝╙╡╡░í ╗í╢≤┴«╝¡ <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>, <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code>, <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>╕ª ░┼└╟ ╝│┴ñ╟╥ ╟╩┐Σ░í ╛°┤┘. └╧├╩┐í └┌╜─└╗ 4░│ └╠╗≤ ╗²╝║╟╧╕Θ <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>┐í ▒Γ╖╧╟╤┤┘. └╠╖▒ ┐└╖∙╣«└╠ ╕╣└╠ ║╕└╠╕Θ └╠ ╝│┴ñ╡Θ└╗ ┴╢└²╟╧▒µ ╣┘╢⌡┤┘. <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> ░ß░·░í ╡╡┐≥└╠ ╡╔ ░═└╠┤┘.</p> <p>╟┴╖╬╝╝╜║ ╗²╝║░· ░ⁿ╖├╟╧┐⌐ <code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code> ╝│┴ñ└║ ╟┴╖╬╝╝╜║╕ª ┴╛╖ß╟╤┤┘. ▒Γ║╗░¬└║ └┌╜─┤τ ├│╕«╟╥ ┐Σ├╗╝÷┐í ┴ª╟╤└╠ ╛°┤┘┤┬ <code>0</code>└╠┤┘. ╟÷└τ ╝│┴ñ└╠ <code>30</code>░· ░░└╠ ╕┼┐∞ └█└║ ░¬└╕╖╬ ╝│┴ñ╡╟└╓┤┘╕Θ, ░¬└╗ ╗≤┤τ╚≈ │⌠╚· ╟╩┐Σ░í └╓┤┘. SunOS│¬ ┐└╖í╡╚ Solaris ╣÷└ⁿ└╗ ╗τ┐δ╟╤┤┘╕Θ, ╕▐╕≡╕«└»├Γ╢º╣«┐í └╠ ░¬└╗ <code>10000</code> ┴ñ╡╡╖╬ ╝│┴ñ╟╧╢≤.</p> <p>┐¼░ß└»┴÷(keep-alive)╕ª ╗τ┐δ╟╤┤┘╕Θ └┌╜─╡Θ└║ └╠╣╠ ┐¡╕░ ┐¼░ß┐í╝¡ ├▀░í ┐Σ├╗└╗ ▒Γ┤┘╕«╕τ ╛╞╣½░═╡╡ ╟╧┴÷╛╩▒Γ╢º╣«┐í ░Φ╝╙ ╣┘╗┌┤┘. <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code>└╟ ▒Γ║╗░¬ <code>15</code> ├╩┤┬ └╠╖▒ ╟÷╗≤└╗ ├╓╝╥╚¡╟╤┤┘. │╫╞«┐≈ ┤δ┐¬╞°░· ╝¡╣÷ └┌┐° ░ú└╟ ▒╒╟ⁿ└╠ ╕┬░╘ ╝│┴ñ╟╤┤┘. <a href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html"> ┐¼░ß└»┴÷└╟ ┤δ║╬║╨└╟ └╠┴í└╠ ╗τ╢≤┴÷▒Γ╢º╣«┐í</a> ╛ε╢▓ ░µ┐∞┐í╡╡ └╠ ░¬└╗ <code>60</code> ├╩ └╠╗≤└╕╖╬ ┐├╕«┴÷ ╕╢╢≤.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="compiletime" id="compiletime">──╞─└╧╜├ ╝│┴ñ┐í ┤δ╟╪╝¡</a></h2> <h3>MPM ╝▒┼├</h3> <p>╛╞╞──í 2.x┤┬ <a href="../mpm.html">┤┘┴▀├│╕«╕≡╡Γ</a> (MPMs)└╠╢≤┤┬ ▒│├╝╟╥ ╝÷ └╓┤┬ ╡┐▒Γ╚¡ ╕≡╡¿└╗ ┴÷┐°╟╤┤┘. ╛╞╞──í╕ª ──╞─└╧╟╥╢º MPM└╗ ╝▒┼├╟╪╛▀ ╟╤┤┘. <code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>┐═ ░░└╠ ╞»┴ñ ╟├╖í╞√┐í╝¡╕╕ ╗τ┐δ╟╥ ╝÷ └╓┤┬ MPM╡╡ └╓┤┘. └╧╣▌└√└╬ └»┤╨╜║╖∙ ╜├╜║┼█└║ ┐⌐╖» MPM ┴▀┐í ╟╧│¬╕ª ╝▒┼├╟╥ ╝÷ └╓┤┘. └Ñ╝¡╣÷└╟ ╝╙╡╡┐═ ╚«└σ╝║(scalability)└║ ╛ε╢▓ MPM└╗ ╝▒┼├╟▀│─┐í ┤▐╖╚┤┘:</p> <ul> <li><code class="module"><a href="../mod/worker.html">worker</a></code> MPM└║ ┐⌐╖» └┌╜─ ╟┴╖╬╝╝╜║░í ░ó░ó ┐⌐╖» ╛▓╖╣╡σ╕ª ╗τ┐δ╟╤┤┘. ░ó ╛▓╖╣╡σ┤┬ ╟╤╣°┐í ╟╤ ┐¼░ß└╗ ┤π┤τ╟╤┤┘. └╧╣▌└√└╕╖╬ worker┤┬ prefork MPM ║╕┤┘ └√└║ ╕▐╕≡╕«╕ª ╗τ┐δ╟╧╣╟╖╬ ┼δ╜┼╖«└╠ ╕╣└║ ╝¡╣÷┐í └√└²╟╧┤┘.</li> <li><code class="module"><a href="../mod/prefork.html">prefork</a></code> MPM└║ ╛▓╖╣╡σ░í ╟╤░│└╬ └┌╜─ ╟┴╖╬╝╝╜║╕ª ┐⌐╖»░│ ╗τ┐δ╟╤┤┘. ░ó ╟┴╖╬╝╝╜║┤┬ ╟╤╣°┐í ╟╤ ┐¼░ß└╗ ┤π┤τ╟╤┤┘. ┐⌐╖» ╜├╜║┼█┐í╝¡ prefork└╟ ╝╙╡╡┤┬ worker┐═ ║±╜┴╟╧┴÷╕╕, ┤⌡ ╕╣└║ ╕▐╕≡╕«╕ª ╗τ┐δ╟╤┤┘. ┤┘└╜░· ░░└║ ╗≤╚▓┐í╝¡ ╛▓╖╣╡σ╕ª ╗τ┐δ╟╧┴÷ ╛╩┤┬ prefork ╣µ╜─└╠ worker┐í ║±╟╪ └╠┴í└╗ ░í┴°┤┘: ╛▓╖╣╡σ┐í ╛╚└ⁿ╟╧┴÷ (thread-safe) ╛╩└║ ┴ª╗∩└┌░í ╕╕╡τ ╕≡╡Γ└╗ ╗τ┐δ╟╥ ╝÷ └╓░φ, ╛▓╖╣╡σ ╡≡╣÷▒δ ┴÷┐°└╠ ║≤╛α╟╤ ╟├╖í╞√┐í╝¡ ╜▒░╘ ╡≡╣÷▒δ╟╥ ╝÷ └╓┤┘.</li> </ul> <p>└╠ MPM╡Θ░· ┤┘╕Ñ MPM┐í ┤δ╟╪ ┤⌡ └┌╝╝╟╤ ┴ñ║╕┤┬ MPM <a href="../mpm.html">╣«╝¡</a>╕ª ┬ⁿ░φ╟╧▒µ ╣┘╢⌡┤┘.</p> <h3><a name="modules" id="modules">╕≡╡Γ</a></h3> <p>╕▐╕≡╕« ╗τ┐δ╖«└╠ ╝║┤╔┐í╝¡ ░í└σ ┴▀┐Σ╟╤ ┐Σ└╬└╠▒Γ╢º╣«┐í ╜╟┴ª╖╬ ╗τ┐δ╟╧┴÷ ╛╩┤┬ ╕≡╡Γ└╗ ┴ª░┼╟╪║╕└┌. ╕≡╡Γ└╗ <a href="../dso.html">DSO</a>╖╬ ──╞─└╧╟▀┤┘╕Θ ░ú┤▄╚≈ ▒╫ ╕≡╡Γ┐í ┤δ╟╤ <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> ┴÷╜├╛ε╕ª ┴╓╝«├│╕«╟╧╕Θ ╡╚┤┘. ▒╫╖í╝¡ ╕≡╡Γ└╗ ┴ª░┼╟╧░φ ╜╟╟α╟╧┐⌐ ╗τ└╠╞«░í ╕≡╡Γ╛°└╠╡╡ ┴ñ╗≤└√└╕╖╬ ╡┐└█╟╧┤┬┴÷ ╗∞╞∞║╝ ╝÷ └╓┤┘.</p> <p>╣▌┤δ╖╬ ╕≡╡Γ└╠ ╛╞╞──í ╜╟╟α╞─└╧┐í ┴ñ└√└╕╖╬ ╕╡┼⌐╡╟└╓┤┘╕Θ ┐°╟╧┴÷ ╛╩┤┬ ╕≡╡Γ└╗ ┴ª░┼╟╧▒Γ└º╟╪ ╛╞╞──í╕ª └τ──╞─└╧╟╪╛▀ ╟╤┤┘.</p> <p>┐⌐▒Γ╝¡ ┤τ┐¼╚≈ ╛ε╢▓ ╕≡╡Γ└╗ ╗τ┐δ╟╧░φ ╗τ┐δ╟╧┴÷ ╕╗┴÷ └╟╣«└╠ ╗²▒Σ┤┘. ┴ñ┤Σ└║ └Ñ╗τ└╠╞«╕╢┤┘ ┤┘╕ú┤┘. ▒╫╖»│¬ ╛╞╕╢╡╡ <em>├╓╝╥╟╤</em> <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>, <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>, <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> ╕≡╡Γ└║ ╗τ┐δ╟╥ ░═└╠┤┘. ╣░╖╨ └Ñ╗τ└╠╞«┐í ╖╬▒╫╞─└╧└╠ ╟╩┐Σ╛°┤┘╕Θ <code>mod_log_config</code>┤┬ ╛°╛ε╡╡ ╡╚┤┘. ▒╫╖»│¬ ├▀├╡╟╧┴÷ ╛╩┤┬┤┘.</p> <h3>Atomic ╕φ╖╔</h3> <p><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> ░░└║ ╕≡╡Γ░· ├╓▒┘ ░│╣▀┴▀└╬ worker MPM└║ APR└╟ atomic API╕ª ╗τ┐δ╟╤┤┘. └╠ API┤┬ ░µ╖«▒▐ ╛▓╖╣╡σ ╡┐▒Γ╚¡╕ª └º╟╥ atomic ╕φ╖╔└╗ ┴ª░°╟╤┤┘.</p> <p>▒Γ║╗└√└╕╖╬ APR└║ ░ó ┐ε┐╡├╝┴ª/CPU ╟├╖í╞√┐í╝¡ ░í└σ ╚┐└▓└√└╬ ╣µ╣²└╗ ╗τ┐δ╟╧┐⌐ └╠ ╕φ╖╔└╗ ▒╕╟÷╟╤┤┘. ┐╣╕ª ╡Θ╛ε, ┐⌐╖» ├╓╜┼ CPU┐í┤┬ ╟╧╡σ┐■╛ε╖╬ atomic compare-and-swap (CAS) ┐¼╗Ω└╗ ╟╧┤┬ ╕φ╖╔╛ε░í └╓┤┘. ▒╫╖»│¬ ╛ε╢▓ ╟├╖í╞√┐í╝¡ APR└║ └╠╖▒ ╕φ╖╔╛ε░í ╛°┤┬ ┐└╖í╡╚ CPU┐═ ╚ú╚»╝║└╗ └º╟╪ ┤⌡ ┤└╕░ mutex▒Γ╣▌ ▒╕╟÷└╗ ▒Γ║╗└√└╕╖╬ ╗τ┐δ╟╤┤┘. └╠╖▒ ╟├╖í╞√┐í╝¡ ╛╞╞──í╕ª ──╞─└╧╟╥╢º ╛╞╞──í╕ª ├╓╜┼ CPU┐í╝¡╕╕ ╜╟╟α╟╥ ░Φ╚╣└╠╢≤╕Θ, ╛╞╞──í╕ª ▒╕╝║╟╥╢º <code>--enable-nonportable-atomics</code> ┐╔╝╟└╗ ╗τ┐δ╟╧┐⌐ ┤⌡ ║ⁿ╕Ñ atomic ▒╕╟÷└╗ ╝▒┼├╟╥ ╝÷ └╓┤┘:</p> <div class="example"><p><code> ./buildconf<br /> ./configure --with-mpm=worker --enable-nonportable-atomics=yes </code></p></div> <p><code>--enable-nonportable-atomics</code> ┐╔╝╟└║ ┤┘└╜░· ░░└║ ╟├╖í╞√┐í ┐╡╟Γ└╠ └╓┤┘:</p> <ul> <li>SPARC┐í╝¡ Solaris<br /> ▒Γ║╗└√└╕╖╬ APR└║ Solaris/SPARC┐í╝¡ mutex▒Γ╣▌ atomic└╗ ╗τ┐δ╟╤┤┘. ▒╫╖»│¬ ▒╕╝║╟╥╢º <code>--enable-nonportable-atomics</code>╕ª ╗τ┐δ╟╧╕Θ APR└║ ║ⁿ╕Ñ ╟╧╡σ┐■╛ε compare-and-swap└╗ └º╟╤ SPARC v8plus ╕φ╖╔╛ε╕ª ╗τ┐δ╟╤┤┘. └╠ ┐╔╝╟└╗ ╗τ┐δ╟╧╕Θ atomic ╕φ╖╔└╠ ┤⌡ ╚┐└▓└√└╠┴÷╕╕ (CPU╕ª ┤· ╗τ┐δ╟╧░φ ┤⌡ │⌠└║ ╡┐▒Γ╚¡░í ░í┤╔╟╧┤┘), ──╞─└╧╟╤ ╜╟╟α╞─└╧└║ UltraSPARC ─¿┐í╝¡╕╕ ╜╟╟α╟╥ ╝÷ └╓┤┘. </li> <li>Linux on x86<br /> ▒Γ║╗└√└╕╖╬ APR└║ ╕«┤¬╜║┐í╝¡ mutex▒Γ╣▌ atomic└╗ ╗τ┐δ╟╤┤┘. ▒╫╖»│¬ ▒╕╝║╟╥╢º <code>--enable-nonportable-atomics</code>╕ª ╗τ┐δ╟╧╕Θ APR└║ ║ⁿ╕Ñ ╟╧╡σ┐■╛ε compare-and-swap└╗ └º╟╤ 486 ╕φ╖╔╛ε╕ª ╗τ┐δ╟╤┤┘. ┤⌡ ╚┐└▓└√└╬ atomic ╕φ╖╔└╠ ░í┤╔╟╧┴÷╕╕, ──╞─└╧╟╤ ╜╟╟α╞─└╧└║ 486 └╠╗≤ ─¿┐í╝¡╕╕ (386└║ ╛╚╡╚┤┘) ╜╟╟α╟╥ ╝÷ └╓┤┘. </li> </ul> <h3>mod_status┐═ ExtendedStatus On</h3> <p>╛╞╞──í╕ª ──╞─└╧╟╥╢º <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>╕ª ╞≈╟╘╟╧░φ ╜╟╟α╟╥╢º <code>ExtendedStatus On</code>└╗ ╝│┴ñ╟╧╕Θ ╛╞╞──í┤┬ ┐Σ├╗└╗ ╣▐└╗╢º╕╢┤┘ <code>gettimeofday(2)</code>(╚ñ└║ ┐ε┐╡├╝┴ª┐í ╡√╢≤ <code>times(2)</code>)╕ª ╡╬╣° ╚ú├Γ╟╧░φ (1.3 └╠└ⁿ┐í┤┬) <code>time(2)</code>╡╡ ├▀░í╖╬ ┐⌐╖»╣° ╚ú├Γ╟╤┤┘. ╗≤┼┬ ║╕░φ╝¡┐í ╡┐└█╜├░ú└╠ ╟╩┐Σ╟╧▒Γ ╢º╣«└╠┤┘. ├╓╗≤└╟ ╝║┤╔└╗ ╛≥└╕╖┴╕Θ (▒Γ║╗░¬└╬) <code>ExtendedStatus off</code>╕ª ╝│┴ñ╟╤┤┘.</p> <h3>accept ┴≈╖─╚¡ - ┐⌐╖» ╝╥─╧</h3> <div class="warning"><h3>┴╓└╟:</h3> <p> ╛╞╖í ╣«╝¡┤┬ ╛╞╞──í └Ñ╝¡╣÷ 2.0 ╣÷└ⁿ┐í╝¡ ║»░µ╡╚ │╗┐δ└╗ ┤π░φ └╓┴÷ ╛╩┤┘. ╛╞┴≈╡╡ └»╚┐╟╤ ┴ñ║╕░í └╓┴÷╕╕, ┴╓└╟╟╪╝¡ ╗τ┐δ╟╧▒µ ╣┘╢⌡┤┘.</p> </div> <p>└»┤╨╜║ ╝╥─╧ API└╟ ┤▄┴í└╗ ╝│╕φ╟╤┤┘. └Ñ╝¡╣÷░í ┐⌐╖» ╞≈╞« ╚ñ└║ ┐⌐╖» ┴╓╝╥╕ª ▒Γ┤┘╕«▒Γ└º╟╪ ┐⌐╖» <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>└╗ ╗τ┐δ╟╤┤┘░φ ░í┴ñ╟╧└┌. ┐¼░ß└╠ ░í┤╔╟╤┴÷ ░ó ╝╥─╧└╗ ░╦╗τ╟╧▒Γ└º╟╪ ╛╞╞──í┤┬ <code>select(2)</code>╕ª ╗τ┐δ╟╤┤┘. <code>select(2)</code>┤┬ ╝╥─╧┐í ▒Γ┤┘╕«░φ └╓┤┬ ┐¼░ß└╠ <em>╛°┤┬┴÷</em> ╚ñ└║ <em>├╓╝╥╟╤ ╟╤░│</em> └╓┤┬┴÷ ╛╦╖┴┴╪┤┘. ╛╞╞──í┐í┤┬ ┐⌐╖» └┌╜─└╠ └╓░φ, ╜¼░φ └╓┤┬ ╕≡╡τ └┌╜─└║ ╡┐╜├┐í ╗⌡╖╬┐ε ┐¼░ß└╗ ░╦╗τ╟╤┤┘. ┐°╖í ▒╕╟÷└║ ┤┘└╜░· ║±╜┴╟╧┤┘ (└╠ ┐╣┤┬ ─┌╡σ┐í╝¡ ░í┴«┐└┴÷ ╛╩╛╥┤┘. ┤▄┴÷ ╝│╕φ╟╧▒Γ└º╟╤ ┐δ╡╡╖╬ ╕╕╡Θ╛·┤┘.):</p> <div class="example"><p><code> for (;;) {<br /> <span class="indent"> for (;;) {<br /> <span class="indent"> fd_set accept_fds;<br /> <br /> FD_ZERO (&accept_fds);<br /> for (i = first_socket; i <= last_socket; ++i) {<br /> <span class="indent"> FD_SET (i, &accept_fds);<br /> </span> }<br /> rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);<br /> if (rc < 1) continue;<br /> new_connection = -1;<br /> for (i = first_socket; i <= last_socket; ++i) {<br /> <span class="indent"> if (FD_ISSET (i, &accept_fds)) {<br /> <span class="indent"> new_connection = accept (i, NULL, NULL);<br /> if (new_connection != -1) break;<br /> </span> }<br /> </span> }<br /> if (new_connection != -1) break;<br /> </span> }<br /> process the new_connection;<br /> </span> } </code></p></div> <p>▒╫╖»│¬ └º└╟ ┤▄╝°╟╤ ▒╕╟÷┐í┤┬ ╜╔░ó╟╤ ░φ░Ñ(starvation) ╣«┴ª░í └╓┤┘. ┐⌐╖» └┌╜─└╠ ╡┐╜├┐í └╠ ╣▌║╣╣«└╗ ╜╟╟α╟╧╕Θ, ┐Σ├╗└╗ ▒Γ┤┘╕«╕τ ╕≡╡╬ <code>select</code>┐í╝¡ ╕╪├ß┤┘. └╠╢º ╛ε╢▓ ╝╥─╧┐í ┐Σ├╗└╠ ╟╧│¬╢≤╡╡ ╡Θ╛ε┐└╕Θ ╕≡╡τ └┌╜─└╠ ▒·╛ε│¡┤┘ (▒·╛ε│¬┤┬ └┌╜─└╟ ░│╝÷┤┬ ┐ε┐╡├╝┴ª┐═ ┼╕└╠╣╓┐í ╡√╢≤ ┤┘╕ú┤┘). └╠╡Θ└║ ╕≡╡╬ ┐¼░ß└╗ <code>accept</code>╟╧▒µ ╜├╡╡╟╤┤┘. ▒╫╖»│¬ (╛╞┴≈╡╡ ╟╤ ┐¼░ß╕╕ ┤δ▒Γ┴▀└╠╢≤╕Θ) ╟╤ └┌╜─╕╕ ╝║░°╟╧░φ, │¬╕╙┴÷┤┬ <code>accept</code>┐í╝¡ <em>╕╪├ß┤┘.</em> ▒╫╖»╕Θ └╠ └┌╜─╡Θ└║ ╟╤ ╝╥─╧└╟ ┐Σ├╗╕╕└╗ ╝¡║±╜║╟╧╡╡╖╧ ╣¡┐⌐╝¡, ▒╫ ╝╥─╧└╕╖╬ ╗⌡╖╬┐ε ┐Σ├╗└╠ ├µ║╨╚≈ ╡Θ╛ε┐═╝¡ ╕≡╡τ └┌╜─└╗ ▒·┐∩╢º▒ε┴÷ ┴ñ┴÷╟╪└╓┤┘. └╠╖▒ ░φ░Ñ ╣«┴ª┤┬ <a href="http://bugs.apache.org/index/full/467">PR#467</a>┐í ├│└╜ ║╕░φ╡╟╛·┤┘. ├╓╝╥╟╤ ╡╬░í┴÷ ╟╪░ß├Ñ└╠ └╓┤┘.</p> <p>╟╤░í┴÷┤┬ ╝╥─╧└╗ ┤δ▒Γ╟╧┴÷ ╛╩╡╡╖╧ (non-blocking) ╕╕╡σ┤┬ ╣µ╣²└╠┤┘. └╠ ░µ┐∞ └┌╜─└╠ <code>accept</code>╕ª ╟╪╡╡ ╕╪├▀┴÷ ╛╩░φ, ┴∩╜├ ┴°╟α╟╥ ╝÷ └╓┤┘. ▒╫╖»│¬ CPU ╜├░ú└╗ │╢║±╟╤┤┘. <code>select</code>┐í╝¡ ╜¼┤┬ └┌╜─└╠ 10░│ └╓░φ, ╗⌡╖╬ ┐¼░ß└╠ ╟╤░│ ╡Θ╛ε┐╘┤┘░φ ░í┴ñ╟╧└┌. ▒╫╖»╕Θ └╠ └┌╜─┴▀ 9░│┤┬ ▒·╛ε│¬╝¡ ┐¼░ß└╗ <code>accept</code>╟╧▒µ ╜├╡╡╟╧░φ ╜╟╞╨╟╧╕Θ ╛╞╣½ └╧╡╡ ╟╧┴÷ ╛╩░φ ┤┘╜├ <code>select</code>╕ª ╣▌║╣╟╤┤┘. ┤┘╜├ <code>select</code>╖╬ ╡╣╛╞┐├ ╢º▒ε┴÷ ╛ε╢▓ └┌╜─╡╡ ┤┘╕Ñ ╝╥─╧┐í ╡Θ╛ε┐┬ ┐Σ├╗└╗ ╝¡║±╜║╟╧┴÷ ╛╩┤┬┤┘. (┤┘┴▀╟┴╖╬╝╝╝¡ ──╟╗┼═┐í╝¡) ╜¼┤┬ └┌╜─ ░│╝÷╕╕┼¡ CPU ░│╝÷░í └╓┤┬ ╡σ╣« ░µ┐∞░í ╛╞┤╧╢≤╕Θ └╠ ╟╪░ß├Ñ└║ ║░╖╬ ┴┴╛╞║╕└╠┴÷ ╛╩┤┬┤┘.</p> <p>┤┘╕Ñ ╣µ╣²└║ ╛╞╞──í░í ╗τ┐δ╟╧┤┬ ╣µ╣²└╕╖╬ │╗║╬ ╣▌║╣╣«┐í ╟╤ └┌╜─╕╕└╗ ╡Θ┐⌐║╕│╜┤┘. ╣▌║╣╣«└║ ┤┘└╜░· ░░┤┘ (┬≈└╠╕ª ░¡┴╢╟▀└╜):</p> <div class="example"><p><code> for (;;) {<br /> <span class="indent"> <strong>accept_mutex_on ();</strong><br /> for (;;) {<br /> <span class="indent"> fd_set accept_fds;<br /> <br /> FD_ZERO (&accept_fds);<br /> for (i = first_socket; i <= last_socket; ++i) {<br /> <span class="indent"> FD_SET (i, &accept_fds);<br /> </span> }<br /> rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);<br /> if (rc < 1) continue;<br /> new_connection = -1;<br /> for (i = first_socket; i <= last_socket; ++i) {<br /> <span class="indent"> if (FD_ISSET (i, &accept_fds)) {<br /> <span class="indent"> new_connection = accept (i, NULL, NULL);<br /> if (new_connection != -1) break;<br /> </span> }<br /> </span> }<br /> if (new_connection != -1) break;<br /> </span> }<br /> <strong>accept_mutex_off ();</strong><br /> process the new_connection;<br /> </span> } </code></p></div> <p><code>accept_mutex_on</code>░· <code>accept_mutex_off</code> <a id="serialize" name="serialize">╟╘╝÷</a>┤┬ mutex ╝╝╕╢╞≈╛ε╕ª ▒╕╟÷╟╤┤┘. ╟╤╣°┐í ┐└┴≈ ╟╤ └┌╜─╕╕└╠ mutex╕ª ░í┴· ╝÷ └╓┤┘. mutex╕ª ▒╕╟÷╟╧┤┬ ╣µ╣²└║ ┐⌐╖»░í┴÷└╠┤┘. ▒╕╟÷ ╣µ╣²└║ (1.3 └╠└ⁿ) <code>src/conf.h</code>│¬ (1.3░· ▒╫ └╠╚─) <code>src/include/ap_config.h</code>┐í ┴ñ└╟╡╟└╓┤┘. ╛ε╢▓ ╛╞┼░┼╪├─┤┬ └ß▒▌(locking) ╣µ╣²└╗ ╝▒┼├╟╧┴÷ ╛╩▒Γ╢º╣«┐í, └╠╖▒ ╛╞┼░┼╪├─┐í╝¡ ┐⌐╖» <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> ┴÷╜├╛ε╕ª ╗τ┐δ╟╧╕Θ └º╟Φ╟╧┤┘.</p> <p>╜╟╟α╜├ <code class="directive"><a href="../mod/mpm_common.html#acceptmutex">AcceptMutex</a></code> ┴÷╜├╛ε╕ª ╗τ┐δ╟╧┐⌐ mutex ▒╕╟÷└╗ ║»░µ╟╥ ╝÷ └╓┤┘.</p> <dl> <dt><code>AcceptMutex flock</code></dt> <dd> <p>└╠ ╣µ╣²└║ └ß▒▌╞─└╧└╗ └ß▒╫▒Γ└º╟╪ <code>flock(2)</code> ╜├╜║┼█╚ú├Γ└╗ ╗τ┐δ╟╤┤┘ (└ß▒▌╞─└╧ └º─í┤┬ <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code> ┴÷╜├╛ε╖╬ ┴÷┴ñ).</p> </dd> <dt><code>AcceptMutex fcntl</code></dt> <dd> <p>└╠ ╣µ╣²└║ └ß▒▌╞─└╧└╗ └ß▒╫▒Γ└º╟╪ <code>fcntl(2)</code> ╜├╜║┼█╚ú├Γ└╗ ╗τ┐δ╟╤┤┘ (└ß▒▌╞─└╧ └º─í┤┬ <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code> ┴÷╜├╛ε╖╬ ┴÷┴ñ).</p> </dd> <dt><code>AcceptMutex sysvsem</code></dt> <dd> <p>(1.3░· ▒╫ └╠╚─) └╠ ╣µ╣²└╗ SysV╜─ ╝╝╕╢╞≈╛ε╕ª ╗τ┐δ╟╧┐⌐ mutex╕ª ▒╕╟÷╟╤┤┘. ║╥╟α╚≈╡╡ SysV╜─ ╝╝╕╢╞≈╛ε┤┬ │¬╗█ ║╬└█┐δ└╠ └╓┤┘. ╟╧│¬┤┬ ╛╞╞──í░í ╝╝╕╢╞≈╛ε╕ª ┴ñ╕«╟╧┴÷ ╛╩░φ ┴╫└╗ ╝÷ └╓┤┬ ┴í└╠┤┘ (<code>ipcs(8)</code> manpage ┬ⁿ░φ). ┤┘╕Ñ ╟╧│¬┤┬ └Ñ╝¡╣÷┐═ ╡┐└╧╟╤ uid╖╬ ╜╟╟α╟╧┤┬ CGI░í (<em>┴∩,</em> <code>suexec</code>│¬ <code>cgiwrapper</code>╕ª ╗τ┐δ╟╧┴÷╛╩┤┬ ╟╤ ╕≡╡τ CGI) ╝╝╕╢╞≈╛ε API╕ª ╗τ┐δ╟╧┐⌐ ╝¡║±╜║░┼║╬░°░▌└╗ ╟╥ ╝÷ └╓┤┬ ┴í└╠┤┘. └╠╖▒ └╠└»╢º╣«┐í IRIX╕ª ┴ª┐▄╟╤ ╛╞┼░┼╪├─┐í╝¡ └╠ ╣µ╣²└╗ ╗τ┐δ╟╧┴÷ ╛╩┤┬┤┘ (┤δ║╬║╨└╟ IRIX ──╟╗┼═┐í╝¡ ╛╒└╟ ╡╬ ╣µ╣²└║ ┴÷│¬─í░╘ ╣÷░╠┤┘).</p> </dd> <dt><code>AcceptMutex pthread</code></dt> <dd> <p>(1.3░· ▒╫ └╠╚─) └╠ ╣µ╣²└║ POSIX mutex╕ª ╗τ┐δ╟╧▒Γ╢º╣«┐í POSIX ╛▓╖╣╡σ ▒╘╛α└╗ ┐╧└ⁿ╚≈ ▒╕╟÷╟╤ ╛╞┼░┼╪├─╢≤╕Θ ╕≡╡╬ ╗τ┐δ░í┤╔╟╧┴÷╕╕, (2.5 └╠╚─) Solaris┐í╝¡╕╕ ▒╫░═╡╡ ╞»┴ñ ▒╕╝║┐í╝¡╕╕ ╡┐└█╟╧┤┬ ╡φ╟╧┤┘. └╠ ╣µ╣²└╗ ╜├╡╡╟╪║╗┤┘╕Θ ╝¡╣÷░í ╕╪├τ╝¡ └└┤Σ└╗ ╛╚╟╧┤┬┴÷ ╗∞╞∞║┴╛▀ ╟╤┤┘. ┴ñ└√ │╗┐δ╕╕ ╝¡║±╜║╟╧┤┬ ╝¡╣÷┤┬ └▀ ╡┐└█╟╧┤┬ ░═ ░░┤┘.</p> </dd> <dt><code>AcceptMutex posixsem</code></dt> <dd> <p>(2.0░· ▒╫ └╠╚─) └╠ ╣µ╣²└║ POSIX ╝╝╕╢╞≈╛ε╕ª ╗τ┐δ╟╤┤┘. mutex╕ª ░í┴° ╟┴╖╬╝╝╜║└╟ ╛▓╖╣╡σ░í ┴╫┤┬┤┘╕Θ(segfault) ╝╝╕╢╞≈╛ε ╝╥└»▒╟└╠ ╚╕║╣╡╟┴÷ ╛╩╛╞╝¡ └Ñ╝¡╣÷░í ╕╪├ß┤┘.</p> </dd> </dl> <p>╜├╜║┼█┐í └º ╕±╖╧┐í ╛°┤┬ ┴≈╖─╚¡(serialization) ╣µ╣²└╠ └╓┤┘╕Θ ▒╫ ╣µ╣²└╗ ╗τ┐δ╟╧┤┬ ─┌╡σ╕ª APR┐í ├▀░í╟╥ ░í─í░í └╓┤┘.</p> <p>░φ╖┴┤┬ ╟╪║├┴÷╕╕ ▒╕╟÷╟╧┴÷╛╩└║ ┤┘╕Ñ ╣µ╣²└║ ║╬║╨└√└╕╖╬ ╣▌║╣╣«└╗ ┴≈╖─╚¡╟╧┤┬ ╣µ╣²└╠┤┘. ┴∩, ╟┴╖╬╝╝╝¡╕ª ╕ε░│╕╕ ╡Θ┐⌐║╕│╗┤┬ ░═└╠┤┘. └╠ ╣µ╣²└║ ┐⌐╖» └┌╜─└╗ ╡┐╜├┐í ╜╟╟α╟╥ ╝÷ └╓╛ε╝¡ ┴≈╖─╚¡╢º╣«┐í └ⁿ├╝ ┤δ┐¬╞°└╗ ╚░┐δ╟╧┴÷ ╕°╟╧┤┬ ┤┘┴▀╟┴╖╬╝╝╝¡ ──╟╗┼═┐í╝¡╕╕ ░ⁿ╜╔└╗ ░í┴«║╝ ╝÷ └╓┤┘. ╛╒└╕╖╬ ╗∞╞∞║╝ ║╬║╨└╠┴÷╕╕, ╕┼┐∞ ║┤╖─╚¡╡╚ └Ñ╝¡╣÷░í ╚τ╟╧┴÷ ╛╩╛╞╝¡ ┐∞╝▒╝°└º░í │╖┤┘.</p> <p>├╓╗≤└╟ ╝║┤╔└╗ ╛≥▒Γ└º╟╪╝¡┤┬ ┐⌐╖» <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> ╣«└╗ ╗τ┐δ╟╧┴÷ ╛╩┤┬ ░═└╠ └╠╗≤└√└╠┤┘. ▒╫╖»│¬ ░Φ╝╙ ╝│╕φ╟╤┤┘.</p> <h3>accept ┴≈╖─╚¡ - ╝╥─╧ ╟╤░│</h3> <p>╛╒└╟ ╝│╕φ└║ ┤┘┴▀╝╥─╧ ╝¡╣÷┐í┤┬ ┴┴┴÷╕╕, ╝╥─╧└╠ ╟╤░│└╬ ╝¡╣÷┤┬ ╛ε╢▓░í? ┐¼░ß└╠ ╡╡┬°╟╥╢º▒ε┴÷ ╕≡╡τ └┌╜─└╠ <code>accept(2)</code>┐í╝¡ ╕╪├τ└╓▒Γ╢º╣«┐í └╠╖╨╗≤ ░░└║ ╣«┴ª░í ╣▀╗²╟╧┴÷ ╛╩░φ, ░φ░Ñ ╣«┴ª╡╡ ╛°┤┘. ▒╫╖»│¬ ╜╟┴ª╖╬┤┬ ╛╒┐í╝¡ ╕╗╟╤ ┤δ▒Γ╟╧┴÷ ╛╩┤┬ (non-blocking) ╣µ╣²┐í╝¡ ╣▀╗²╟╧┤┬ "░°╚╕└ⁿ(spinning)" ╟÷╗≤└╗ ░¿├▀░φ └╓┤┘. ┤δ║╬║╨└╟ TCP ╜║┼├└║ ┐¼░ß└╠ ╡╡┬°╟╧╕Θ ─┐│╬└╠ <code>accept</code>┐í╝¡ ╕╪├τ└╓┤┬ ╕≡╡τ └┌╜─└╗ ▒·┐∞╡╡╖╧ ▒╕╟÷╡╟└╓┤┘. ╟┴╖╬╝╝╜║┴▀ ╟╤░│░í ┐¼░ß└╗ ╛≥░φ ╗τ┐δ└┌┐╡┐¬└╕╖╬ ╡╣╛╞░í░φ, │¬╕╙┴÷┤┬ ─┐│╬┐í╝¡ ░°╚╕└ⁿ╟╧┐⌐ ┐¼░ß└╠ ╛°└╜└╗ ╣▀░▀╟╧╕Θ ┤┘╜├ └ß└╗ └▄┤┘. ╗τ┐δ└┌┐╡┐¬ ─┌╡σ┐í╝¡┤┬ └╠╖▒ ░°╚╕└ⁿ└╗ ╛╦ ╝÷ ╛°┴÷╕╕, ║╨╕φ╚≈ ┴╕└τ╟╤┤┘. ▒╫╖í╝¡ ┤┘┴▀╝╥─╧└╟ ┤δ▒Γ╟╧┴÷ ╛╩┤┬ ╣µ╣²░· ╡┐└╧╟╧░╘ ║╬╟╧╕ª │⌠└╠┤┬ ║╥╟╩┐Σ╟╤ ╟α╡┐└╠ └╧╛ε│¡┤┘.</p> <p>▒╫╖í╝¡ ┐∞╕«┤┬ ┐⌐╖» ╛╞┼░┼╪├─┐í╝¡ ╝╥─╧└╠ ╟╤░│└╬ ░µ┐∞┐í╡╡ ┴≈╖─╚¡╟╧╕Θ ┤⌡ "└▀" ╡┐└█╟╘└╗ ╣▀░▀╟▀┤┘. ▒╫╖í╝¡ ░┼└╟ ┤δ║╬║╨└╟ ░µ┐∞ ▒Γ║╗└√└╕╖╬ ┴≈╖─╚¡╕ª ╗τ┐δ╟╤┤┘. ╕«┤¬╜║┐í╝¡ (─┐│╬ 2.0.30, 128Mb ╕▐╕≡╕«┐í ╡α╛≤ Pentium pro) ╜╟╟Φ╟╤ ░ß░· ╝╥─╧ ╟╤░│╕ª ┴≈╖─╚¡╟╧╕Θ ╟╧┴÷ ╛╩└║ ░µ┐∞┐í ║±╟╪ ├╩┤τ ┐Σ├╗└╠ 3% ╣╠╕╕ ┴┘╛ε╡Θ╛·┤┘. ▒╫╖»│¬ ┴≈╖─╚¡╕ª ╟╧┴÷ ╛╩└║ ░µ┐∞ ┐Σ├╗┤τ 100ms ┴÷┐¼└╠ ╣▀╗²╟▀┤┘. └╠ ┴÷┐¼└║ ╛╞╕╢╡╡ LAN┐í╝¡ ╣▀╗²╟╧┤┬ ▒Σ ┐¼░ß╝▒╢º╣«└╧ ░═└╠┤┘. ╝╥─╧└╠ ╟╤░│└╬ ░µ┐∞ ┴≈╖─╚¡╕ª ╗τ┐δ╟╧┴÷ ╛╩└╕╖┴╕Θ <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code>╕ª ┴ñ└╟╟╤┤┘.</p> <h3>Close ┴÷┐¼(lingering)</h3> <p><a href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt"> draft-ietf-http-connection-00.txt</a> 8└²┐í╝¡ ╝│╕φ╟╧╡φ└╠ <strong>╛╚┴ñ└√└╬</strong> └Ñ╝¡╣÷░í ╡╟╖┴╕Θ, ┼δ╜┼└╟ ╛τ ╣µ╟Γ└╗ ╡╢╕│└√└╕╖╬ ┤▌└╗ ╝÷ └╓╛ε╛▀ ╟╤┤┘ (TCP ┐¼░ß└║ ╜╓╣µ╟Γ└╠░φ, ╣µ╟Γ└║ ╝¡╖╬ ╡╢╕│└√└╠┤┘). └╠┴í└╗ ┤┘╕Ñ ╝¡╣÷┐í╝¡┤┬ └┌┴╓ ░ú░·╟╧┴÷╕╕, ╛╞╞──í┤┬ 1.2║╬┼═ ┴ñ╚«╚≈ ▒╕╟÷╟╪┐╘┤┘.</p> <p>└╠ ▒Γ┤╔└╗ ║╬┴╓└╟╟╧░╘ ╛╞╞──í┐í ├▀░í╟▀└╗╢º ┐⌐╖» └»┤╨╜║ ╣÷└ⁿ┐í╝¡ ╕╣└║ ╣«┴ª░í ╣▀╗²╟▀┤┘. TCP ▒╘╛α└║ <code>FIN_WAIT_2</code>┐í ┼╕└╙╛╞┐⌠└╠ └╓┤┘░φ ┴ñ╟╧┴÷ ╛╩╛╥┴÷╕╕, ▒▌┴÷╟╧┴÷╡╡ ╛╩╛╥┤┘. ┼╕└╙╛╞┐⌠└╠ ╛°┤┬ ╜├╜║┼█┐í╝¡ ╛╞╞──í 1.2┤┬ ╕╣└║ ╝╥─╧└╗ ┐╡┐°╚≈ <code>FIN_WAIT_2</code> ╗≤┼┬╖╬ ╕╕╡Θ╛·┤┘. ╕╣└║ ░µ┐∞ └╠ ╣«┴ª┤┬ ┴ª└█╗τ░í ┴ª░°╟╧┤┬ ├╓╜┼ TCP/IP ╞╨─í╕ª └√┐δ╟╧┐⌐ ╟╪░ß╟╥ ╝÷ └╓┤┘. ▒╫╖»│¬ ┴ª└█╗τ░í ╞╨─í╕ª ╣▀╟Ñ╟╧┴÷ ╛╩┤┬ ░µ┐∞░í (<em>┴∩,</em> SunOS4 -- ╝╥╜║ ╢≤└╠╝▒╜║░í └╓┤┬ ╗τ╢≈└║ ┴≈┴ó ╞╨─í╟╥ ╝÷ └╓┴÷╕╕) └╓▒Γ╢º╣«┐í └╠ ▒Γ┤╔└╗ ╗τ┐δ╟╧┴÷ ╛╩▒Γ╖╬ ░ß┴ñ╟▀┤┘.</p> <p>╣µ╣²└║ ╡╬░í┴÷┤┘. ╟╧│¬┤┬ ╝╥─╧ ┐╔╝╟ <code>SO_LINGER</code>╕ª ╗τ┐δ╟╧┤┬ ╣µ╣²└╠┤┘. ▒╫╖»│¬ ║╥╟α╚≈╡╡ ┤δ║╬║╨└╟ TCP/IP ╜║┼├└║ └╠ ┐╔╝╟└╗ ┐├╣┘╖╬ ▒╕╟÷╟╧┴÷ ╛╩╛╥┤┘. ┐├╣┘╖╬ ▒╕╟÷╟╤ ╜║┼├┐í╝¡ ┴╢┬≈╡╡ (<em>┴∩,</em> ╕«┤¬╜║ 2.0.31) └╠ ╣µ╣²└║ ┤┘└╜ ╣µ╣²║╕┤┘ ┤⌡ cpu╕ª └Γ╛╞╕╘┤┬┤┘.</p> <p>╛╞╞──í┤┬ ║╕┼δ (<code>http_main.c</code>┐í └╓┤┬) <code>lingering_close</code>╢≤┤┬ ╟╘╝÷╕ª ╗τ┐δ╟╤┤┘. └╠ ╟╘╝÷┤┬ ┤δ├µ ┤┘└╜░· ░░┤┘:</p> <div class="example"><p><code> void lingering_close (int s)<br /> {<br /> <span class="indent"> char junk_buffer[2048];<br /> <br /> /* shutdown the sending side */<br /> shutdown (s, 1);<br /> <br /> signal (SIGALRM, lingering_death);<br /> alarm (30);<br /> <br /> for (;;) {<br /> <span class="indent"> select (s for reading, 2 second timeout);<br /> if (error) break;<br /> if (s is ready for reading) {<br /> <span class="indent"> if (read (s, junk_buffer, sizeof (junk_buffer)) <= 0) {<br /> <span class="indent"> break;<br /> </span> }<br /> /* just toss away whatever is here */<br /> </span> }<br /> </span> }<br /> <br /> close (s);<br /> </span> } </code></p></div> <p>└╠ ─┌╡σ┤┬ ┐¼░ß└╗ ┤▌└╗╢º ┤⌡ CPU╕ª ╗τ┐δ╟╧┴÷╕╕, ╛╚┴ñ└√└╬ ▒╕╟÷└╗ └º╟╪ ╟╩┐Σ╟╧┤┘. HTTP/1.1└╠ ┤⌡ │╬╕« ╞█┴÷░φ ╕≡╡τ ┐¼░ß└╗ └»┴÷╟╤┤┘╕Θ(persistent), ┐¼░ß└╗ ╣▐┤┬ ║±┐δ└║ ┐⌐╖» ┐Σ├╗└╗ ├│╕«╟╧╕Θ╝¡ ╗≤╝Γ╡╔ ░═└╠┤┘. └º╟Φ╟╧░╘╡╡ <code>NO_LINGCLOSE</code>╕ª ┴ñ└╟╟╧┐⌐ └╠ ▒Γ┤╔└╗ ╗τ┐δ╟╧┴÷ ╛╩└╗ ╝÷ └╓┴÷╕╕, └²┤δ╖╬ ▒╟╟╧┴÷ ╛╩┤┬┤┘. ╞»╚≈ HTTP/1.1 ╞─└╠╟┴╢≤└╬ <span class="transnote">(<em>┐¬┴╓;</em> ┐¼░ß└»┴÷ ╗≤┼┬┐í╝¡ └└┤Σ└╗ ▒Γ┤┘╕«┴÷ ╛╩░φ ┐⌐╖» ┐Σ├╗└╗ ║╕│╗┤┬ ▒Γ╝·)</span> ┐¼░ß└»┴÷┐í┤┬ <code>lingering_close</code>░í ╟╩╝÷└√└╠┤┘ (▒╫╕«░φ <a href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html"> ╞─└╠╟┴╢≤└╬ ┐¼░ß└╠ ┤⌡ ║ⁿ╕ú▒Γ╢º╣«┐í</a> ╗τ┐δ╟╧▒µ ╣┘╢÷ ░═└╠┤┘).</p> <h3>Scoreboard ╞─└╧</h3> <p>╛╞╞──í└╟ ║╬╕≡┐═ └┌╜─└║ scoreboard╢≤┤┬ ░═└╗ ┼δ╟╪ ╝¡╖╬ ┼δ╜┼╟╤┤┘. └╠╗≤└√└╕╖╬┤┬ scoreboard╕ª ░°└»╕▐╕≡╕«╖╬ ▒╕╟÷╟╪╛▀ ╟╤┤┘. ┐∞╕« ░│╣▀└┌░í ╟╪┤τ ┐ε┐╡├╝┴ª┐í ┴ó▒┘╟╥ ╝÷ └╓░┼│¬ ╗≤╝╝╟╤ ╞≈╞├ ░ß░·╕ª ╣▐└║ ░µ┐∞ ║╕┼δ ░°└»╕▐╕≡╕«╕ª ╗τ┐δ╟╧┐⌐ ▒╕╟÷╟╤┤┘. │¬╕╙┴÷┤┬ ╡≡╜║┼⌐┐í └╓┤┬ ╞─└╧└╗ ╗τ┐δ╟╧┐⌐ ▒╕╟÷╟╤┤┘. ╡≡╜║┼⌐┐í └╓┤┬ ╞─└╧└║ ┤└╕«░φ ╜┼╖┌╡╡░í ╢│╛ε┴°┤┘ (▒Γ┤╔╡╡ ┤⌡ └√┤┘). <code>src/main/conf.h</code> ╞─└╧┐í╝¡ ╗τ┐δ╟╧┤┬ ╛╞┼░┼╪├─╕ª ├ú╛╞╝¡ <code>USE_MMAP_SCOREBOARD</code> ╚ñ└║ <code>USE_SHMGET_SCOREBOARD</code>└╬┴÷ ╚«└╬╟╤┤┘. ╡╤┴▀ ╟╧│¬╕ª (░ó░ó ╟╘▓▓ ╗τ┐δ╟╥ <code>HAVE_MMAP</code>└╠│¬ <code>HAVE_SHMGET</code>╡╡ ░░└╠) ┴ñ└╟╟╧╕Θ ░°└»╕▐╕≡╕« ─┌╡σ╕ª ╗τ┐δ╟╤┤┘. ╜├╜║┼█└╠ ┤┘╕Ñ ┴╛╖∙└╟ ░°└»╕▐╕≡╕«╕ª ╗τ┐δ╟╤┤┘╕Θ <code>src/main/http_main.c</code> ╞─└╧└╗ ╝÷┴ñ╟╧┐⌐ ╛╞╞──í┐í╝¡ ░°└»╕▐╕≡╕«╕ª ╗τ┐δ╟╥ ╝÷ └╓╡╡╖╧ ╚┼(hook)└╗ ├▀░í╟╧╢≤. (╢╟╟╤ ╞╨─í╕ª ┐∞╕«┐í░╘ ║╕│╗┴╓▒µ ╣┘╢⌡┤┘.)</p> <div class="note">┐¬╗τ└√ ╝│╕φ: ╛╞╞──í└╟ ╕«┤¬╜║ ╣÷└ⁿ└║ ╛╞╞──í 1.2 ╣÷└ⁿ║╬┼═ ░°└»╕▐╕≡╕«╕ª ╗τ┐δ╟╧▒Γ ╜├└█╟▀┤┘. ╕«┤¬╜║┐í╝¡ ├╩▒Γ ╛╞╞──í ╣÷└ⁿ└╠ ┤└╕«░φ ╜┼╖┌╡╡░í ╢│╛ε┴│▒Γ ╢º╣«└╠┤┘.</div> <h3>DYNAMIC_MODULE_LIMIT</h3> <p>╕≡╡Γ└╗ ╡┐└√└╕╖╬ └╨╛ε╡Θ└╠┴÷ ╛╩┤┬┤┘╕Θ (░í┤╔╟╤ ┴╢▒▌└╠╢≤╡╡ ╝║┤╔└╗ │⌠└╠▒Γ└º╟╪ └╠ ▒█└╗ └╨┤┬┤┘╕Θ ╛╞╕╢╡╡ ╕≡╡Γ└╗ ╡┐└√└╕╖╬ └╨╛ε╡Θ└╠┴÷ ╛╩└╗ ░═└╠┤┘), ╝¡╣÷╕ª ──╞─└╧╟╥╢º <code>-DDYNAMIC_MODULE_LIMIT=0</code>└╗ ├▀░í╟╤┤┘. ▒╫╖»╕Θ ╕≡╡Γ└╗ ╡┐└√└╕╖╬ └╨╛ε╡Θ└╠▒Γ└º╟╪ ╟╥┤τ╟╧┤┬ ╕▐╕≡╕«╕ª └²╛α╟╤┤┘.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="trace" id="trace">║╬╖╧: ╜├╜║┼█╚ú├Γ ▒Γ╖╧└╗ └┌╝╝╚≈ ║╨╝«╟╧▒Γ</a></h2> <p>┤┘└╜└║ Solaris 8┐í╝¡ worker MPM└╗ ╗τ┐δ╟╤ ╛╞╞──í 2.0.38└╟ ╜├╜║┼█╚ú├Γ ▒Γ╖╧(trace)└╠┤┘. ╛╞╖í ╕φ╖╔╛ε╕ª ╗τ┐δ╟╧┐⌐ ▒Γ╖╧└╗ ╛≥╛·┤┘:</p> <div class="example"><p><code> truss -l -p <var>httpd_child_pid</var>. </code></p></div> <p><code>-l</code> ┐╔╝╟└╗ ╗τ┐δ╟╧╕Θ truss┤┬ ╜├╜║┼█╚ú├Γ└╗ ╟╧┤┬ LWP (lightweight process, ░µ╖«▒▐ ╟┴╖╬╝╝╜║--Solaris└╟ ─┐│╬╝÷┴╪ ╛▓╖╣╡σ) ID╕ª ░░└╠ ▒Γ╖╧╟╤┤┘.</p> <p>┤┘╕Ñ ╜├╜║┼█┐í┤┬ <code>strace</code>, <code>ktrace</code>, <code>par</code> ░░└║ ╜├╜║┼█╚ú├Γ ├▀└√ ╡╡▒╕░í └╓┤┘. ░ß░·┤┬ ║±╜┴╟╧┤┘.</p> <p>┼¼╢≤└╠╛≡╞«┤┬ └Ñ╝¡╣÷┐í░╘ ┼⌐▒Γ░í 10KB└╬ ┴ñ└√ ╞─└╧└╗ ┐Σ├╗╟╤┤┘. ┴ñ└√└╬ ╞─└╧└╗ ┐Σ├╗╟╧┴÷ ╛╩░┼│¬ │╗┐δ╟∙╗≤╟╧┤┬ ┐Σ├╗└╗ ╟╤ ░µ┐∞ ▒Γ╖╧└╠ ╕┼┐∞ ┤┘╕ú┤┘ (╢º╖╬┤┬ ╕┼┐∞ ╛╦╛╞║╕▒Γ ╚√╡Θ┤┘).</p> <div class="example"><pre>/67: accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...) /67: accept(3, 0x00200BEC, 0x00200C0C, 1) = 9</pre></div> <p>└º┐í╝¡ ┐¼░ß┤δ▒Γ(listener) ╛▓╖╣╡σ░í LWP #67┐í╝¡ ╜╟╟α╡╩└╗ ╛╦ ╝÷ └╓┤┘.</p> <div class="note"><code>accept(2)</code> ┴≈╖─╚¡╕ª ╗τ┐δ╟╧┴÷ ╛╩└╜└╗ ┴╓╕±╟╧╢≤. ┐⌐╖» ╞≈╞«╕ª ▒Γ┤┘╕«┴÷╛╩┤┬ ░µ┐∞ └╠ ╟├╖í╞√└╟ worker MPM└║ ▒Γ║╗└√└╕╖╬ ┴≈╖─╚¡╟╧┴÷ ╛╩└║ accept╕ª ╗τ┐δ╟╤┤┘.</div> <div class="example"><pre>/65: lwp_park(0x00000000, 0) = 0 /67: lwp_unpark(65, 1) = 0</pre></div> <p>┐¼░ß└║ ╣▐╛╞╡Θ└╠░φ(accept) ┐¼░ß┤δ▒Γ ╛▓╖╣╡σ┤┬ worker ╛▓╖╣╡σ╕ª ▒·┐÷╝¡ ┐Σ├╗└╗ ├│╕«╟╧░╘ ╟╤┤┘. ╛╞╖í ▒Γ╖╧┐í╝¡ ┐Σ├╗└╗ ├│╕«╟╧┤┬ worker ╛▓╖╣╡σ░í LWP #65└╙└╗ ╛╦ ╝÷ └╓┤┘.</p> <div class="example"><pre>/65: getsockname(9, 0x00200BA4, 0x00200BC4, 1) = 0</pre></div> <p>░í╗≤╚ú╜║╞«╕ª ▒╕╟÷╟╧▒Γ└º╟╪ ╛╞╞──í┤┬ ┐¼░ß└╗ ╣▐╛╞╡Θ└╬ ┴÷┐¬(local) ╝╥─╧ ┴╓╝╥╕ª ╛╦╛╞╛▀ ╟╤┤┘. (░í╗≤╚ú╜║╞«╕ª ╗τ┐δ╟╧┴÷ ╛╩░┼│¬ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> ┴÷╜├╛ε┐í ┐═└╧╡σ─½╡σ ┴╓╝╥╕ª ╗τ┐δ╟╧┴÷ ╛╩└║ ░µ┐∞ ╡ε) ╕╣└║ ░µ┐∞ └╠ ╚ú├Γ└╗ ╛°╛┘ ╝÷ └╓┤┘. ▒╫╖»│¬ ╛╞┴≈ └╠╖▒ ├╓└√╚¡ └█╛≈└╠ ╛╚╡╟└╓┤┘. </p> <div class="example"><pre>/65: brk(0x002170E8) = 0 /65: brk(0x002190E8) = 0</pre></div> <p><code>brk(2)</code> ╚ú├Γ└║ ╚ⁿ(heap)┐í╝¡ ╕▐╕≡╕«╕ª ╟╥┤τ╟╤┤┘. └Ñ╝¡╣÷┤┬ ┤δ║╬║╨└╟ ┐Σ├╗ ├│╕«╜├ └┌├╝ ╕▐╕≡╕« ╟╥┤τ└┌(<code>apr_pool</code>░· <code>apr_bucket_alloc</code>)╕ª ╗τ┐δ╟╧▒Γ╢º╣«┐í ╜├╜║┼█╚ú├Γ ▒Γ╖╧┐í╝¡ └╠ ╜├╜║┼█╚ú├Γ└╗ ║╕▒Γ░í ╡σ╣░┤┘. └╠ ▒Γ╖╧┐í╝¡ └Ñ╝¡╣÷┤┬ ╜├└█╟╧└┌╕╢└┌ └┌├╝ ╕▐╕≡╕« ╟╥┤τ└┌░í ╗τ┐δ╟╥ ╕▐╕≡╕«║φ╖╧└╗ ╛≥▒Γ└º╟╪ <code>malloc(3)</code>└╗ ╚ú├Γ╟╤┤┘.</p> <div class="example"><pre>/65: fcntl(9, F_GETFL, 0x00000000) = 2 /65: fstat64(9, 0xFAF7B818) = 0 /65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0 /65: fstat64(9, 0xFAF7B818) = 0 /65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0 /65: setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0 /65: fcntl(9, F_SETFL, 0x00000082) = 0</pre></div> <p>┤┘└╜ worker ╛▓╖╣╡σ┤┬ ┼¼╢≤└╠╛≡╞«└╟ ┐¼░ß(╞─└╧▒Γ╝·└┌ 9)└╗ ┤δ▒Γ╛╚╟╘(non-blocking) ╗≤┼┬╖╬ ╣┘▓█┤┘. <code>setsockopt(2)</code>┐═ <code>getsockopt(2)</code> ╚ú├Γ└║ Solaris└╟ libc░í ╝╥─╧┐í ┤δ╟╤ <code>fcntl(2)</code>└╗ ╛ε╢╗░╘ ├│╕«╟╧┤┬┴÷ ║╕┐⌐┴╪┤┘.</p> <div class="example"><pre>/65: read(9, " G E T / 1 0 k . h t m".., 8000) = 97</pre></div> <p>worker ╛▓╖╣╡σ┤┬ ┼¼╢≤└╠╛≡╞«╖╬ ║╬┼═ ┐Σ├╗└╗ └╨┤┬┤┘.</p> <div class="example"><pre>/65: stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0 /65: open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre></div> <p>└Ñ╝¡╣÷ ╝│┴ñ└║ <code>Options FollowSymLinks</code>┐═ <code>AllowOverride None</code>└╠┤┘. ▒╫╖í╝¡ ┐Σ├╗╟╤ ╞─└╧░µ╖╬└╟ ░ó ╡≡╖║┼Σ╕«┐í ┤δ╟╪ <code>lstat(2)</code>╟╧░┼│¬ <code>.htaccess</code> ╞─└╧└╗ ░╦╗τ╟╥ ╟╩┐Σ░í ╛°┤┘. ╞─└╧└╗ ░╦╗τ╟╧▒Γ└º╟╪, 1) ╞─└╧└╠ └╓┤┬┴÷, 2) ╡≡╖║┼Σ╕«░í ╛╞┤╤ └╧╣▌╞─└╧└╬┴÷, <code>stat(2)</code> ╚ú├Γ╕╕ ╟╧╕Θ ╡╚┤┘.</p> <div class="example"><pre>/65: sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C) = 10269</pre></div> <p>└╠ ░µ┐∞ └Ñ╝¡╣÷┤┬ ╟╤╣°└╟ <code>sendfilev(2)</code> ╜├╜║┼█╚ú├Γ╖╬ HTTP └└┤Σ╟∞┤⌡┐═ ┐Σ├╗╟╤ ╞─└╧└╗ └ⁿ╝█╟╥ ╝÷ └╓┤┘. Sendfile ┴÷┐°┐⌐║╬┤┬ ┐ε┐╡├╝┴ª╕╢┤┘ ┤┘╕ú┤┘. ┤┘╕Ñ ╜├╜║┼█└╠╢≤╕Θ <code>sendfile(2)</code>└╗ ╚ú├Γ╟╧▒Γ └ⁿ┐í ╟∞┤⌡╕ª ║╕│╗▒Γ└º╟╪ <code>write(2)</code>│¬ <code>writev(2)</code> ╚ú├Γ└╗ ╟╤┤┘.</p> <div class="example"><pre>/65: write(4, " 1 2 7 . 0 . 0 . 1 - ".., 78) = 78</pre></div> <p><code>write(2)</code> ╚ú├Γ└║ ┴ó▒┘╖╬▒╫(access log)┐í ┐Σ├╗└╗ ▒Γ╖╧╟╤┤┘. └╠ ▒Γ╖╧┐í <code>time(2)</code> ╚ú├Γ└╠ ╛°└╜└╗ ┴╓╕±╟╧╢≤. ╛╞╞──í 1.3░· ┤▐╕« ╛╞╞──í 2.0└║ ╜├░ú└╗ ╛╦▒Γ└º╟╪ <code>gettimeofday(3)</code>╕ª ╗τ┐δ╟╤┤┘. <code>gettimeofday</code>╕ª ├╓└√╚¡╟╤ ╕«┤¬╜║┐═ Solaris ░░└║ ╕ε╕ε ┐ε┐╡├╝┴ª┐í╝¡┤┬ └╧╣▌└√└╬ ╜├╜║┼█╚ú├Γ ║╬┤π└╠ ╛°┤┘.</p> <div class="example"><pre>/65: shutdown(9, 1, 1) = 0 /65: poll(0xFAF7B980, 1, 2000) = 1 /65: read(9, 0xFAF7BC20, 512) = 0 /65: close(9) = 0</pre></div> <p>worker ╛▓╖╣╡σ┤┬ ┐¼░ß└╗ ┴÷┐¼┤▌▒Γ(lingering close)╟╤┤┘.</p> <div class="example"><pre>/65: close(10) = 0 /65: lwp_park(0x00000000, 0) (sleeping...)</pre></div> <p>╕╢┴÷╕╖└╕╖╬ worker ╛▓╖╣╡σ┤┬ ╣µ▒▌ └ⁿ╝█╟╤ ╞─└╧└╗ ┤▌░φ, ┐¼░ß┤δ▒Γ(listener) ╛▓╖╣╡σ░í ┤┘╕Ñ ┐¼░ß└╗ ╟╥┤τ╟╥ ╢º▒ε┴÷ ┴ñ┴÷╟╤┤┘.</p> <div class="example"><pre>/67: accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre></div> <p>▒╫╡┐╛╚ ┐¼░ß┤δ▒Γ ╛▓╖╣╡σ┤┬ ┐¼░ß└╗ (╕≡╡τ worker░í └█╛≈┴▀└╠╕Θ ┐¼░ß┤δ▒Γ ╛▓╖╣╡σ╕ª ╕╪├▀┤┬ worker MPM└╟ ╚σ╕º┴ª╛ε ▒Γ┤╔┐í ╡√╢≤) worker ╛▓╖╣╡σ┐í ╟╥┤τ╟╧└┌╕╢└┌ ┤┘╕Ñ ┐¼░ß└╗ ╣▐╛╞╡Θ└╧ ╝÷ └╓┤┘. └╠ ▒Γ╖╧┐í┤┬ │¬┐└┴÷ ╛╩┴÷╕╕, worker ╛▓╖╣╡σ░í ╣µ▒▌ ╣▐└║ ┐¼░ß└╗ ├│╕«╟╧┤┬ ╡┐╛╚ ┤┘└╜ <code>accept(2)</code>░í (┐Σ├╗└╠ ╕┼┐∞ ╕╣└║ ░µ┐∞ ╟╫╗≤) └╧╛ε│» ╝÷ └╓┤┘.</p> </div></div> <div class="bottomlang"> <p><span>░í┤╔╟╤ ╛≡╛ε: </span><a href="../en/misc/perf-tuning.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="../ko/misc/perf-tuning.html" title="Korean"> ko </a></p> </div><div id="footer"> <p class="apache">Copyright 1995-2006 The Apache Software Foundation or its licensors, as applicable.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> <p class="menu"><a href="../mod/">╕≡╡Γ</a> | <a href="../mod/directives.html">┴÷╜├╛ε╡Θ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">┐δ╛ε</a> | <a href="../sitemap.html">╗τ└╠╞«╕╩</a></p></div> </body></html>